어휘 확장
어휘 확장자연어처리(NLP, Natural Language Processing) 모델 성능은 모델이 이해하고 처리할 수 있는 어휘의 범위에 크게 영향을 받습니다. 특히 언어는 지속적으로 진화하고, 새로운 단어, 줄임말, 신조어, 전문 용어 등이 등장하기 때문에, 모델의 어휘가 고정되어 있을 경우 성능 저하가 불가피합니다. 어휘 확장(Vocabulary Expansion)은 이러한 문제를 해결하기 위한 핵심적인 모델 유지보수 기법으로, 기존 모델이 학습되지 않은 새로운 어휘를 효과적으로 통합하여 모델의 일반화 능력과 실용성을 향상시키는 과정입니다.
개요
어휘 확장은 자연어처리 모델이 새로운 언어적 표현을 인식하고 처리할 수 있도록 기존 어휘 사전(vocabulary)에 새로운 단어 또는 서브워드(subword) 단위를 추가하는 작업을 의미합니다. 이는 주로 사전 훈련된 언어 모델(예: BERT, GPT 등)을 특정 도메인이나 최신 언어 환경에 맞게 조정할 때 중요한 절차로 작용합니다.
기존 모델의 어휘는 일반적으로 특정 시점의 텍스트 코퍼스를 기반으로 구성되며, 이후 발생하는 언어 변화에 대응하지 못할 수 있습니다. 예를 들어, "코로나19", "메타버스", "AI 생성 콘텐츠" 같은 신조어는 초기 훈련 데이터에 포함되지 않았을 가능성이 높습니다. 이러한 단어를 모델이 처리하지 못하면, 의미 분석, 기계 번역, 질의 응답 등의 작업에서 오류가 발생할 수 있습니다.
따라서 어휘 확장은 모델의 수명 주기 동안 지속적인 유지보수를 통해 언어 변화에 대응하고, 다양한 도메인에서의 성능을 유지하거나 향상시키는 데 필수적인 기술입니다.
어휘 확장의 필요성
1. 언어의 동적 변화
언어는 고정된 것이 아니라 사회적, 기술적 변화에 따라 끊임없이 진화합니다. 신조어, 외래어, 줄임말, 인터넷 용어 등이 빠르게 등장하고 퍼지기 때문에, 정적인 어휘를 가진 모델은 곧 낙후됩니다.
2. 도메인 특화 요구
특정 도메인(의료, 법률, 금융 등)에서는 전문 용어가 많이 사용됩니다. 일반적으로 훈련된 모델은 이러한 용어를 포함하지 않기 때문에, 도메인 적응 과정에서 어휘 확장이 필요합니다.
3. 성능 저하 방지
어휘에 포함되지 않은 단어는 보통 [UNK]
(Unknown) 토큰으로 처리되며, 이는 의미 정보의 손실을 초래합니다. 어휘 확장은 [UNK]
발생률을 줄여 모델의 정확도를 높입니다.
어휘 확장 기법
1. 어휘 재구성 (Re-tokenization)
기존 모델의 토크나이저(tokenizer)를 새로운 코퍼스에 다시 학습시켜 어휘를 재구성하는 방법입니다. 예를 들어, SentencePiece 또는 BPE(Byte Pair Encoding) 알고리즘을 사용해 새로운 토큰 집합을 생성하고, 모델의 임베딩 레이어를 재학습하거나 조정합니다.
- 장점: 새로운 언어 패턴을 정확히 반영 가능
- 단점: 전체 모델 재학습이 필요할 수 있음
2. 어휘 추가 (Vocabulary Augmentation)
기존 어휘에 새로운 단어를 직접 추가하고, 추가된 단어에 대한 임베딩 벡터를 초기화한 후 미세조정(fine-tuning)을 수행하는 방법입니다.
- 초기화 방식:
- 평균 임베딩 벡터로 초기화
- 관련 단어의 임베딩과 유사하게 설정
-
무작위 초기화 후 학습
-
장점: 기존 모델 구조 유지, 비교적 경제적
- 단점: 추가된 어휘의 표현력이 초기에는 약함
3. 동적 어휘 확장 (Dynamic Vocabulary Expansion)
실시간 또는 배치 방식으로 새로운 단어를 감지하고, 모델이 그 단어를 학습할 수 있도록 동적으로 업데이트하는 기법입니다. 주로 온라인 학습 환경에서 활용됩니다.
- 예: 사용자 입력에서 반복적으로 등장하는 신조어를 감지하고, 주기적으로 모델 업데이트
- 도전 과제: 기존 학습된 지식의 소실(forgetting) 방지
기술적 고려사항
임베딩 레이어 확장
어휘가 확장되면, 모델의 입력 임베딩 레이어와 출력 레이어(예: 언어 모델의 로짓 계층)의 차원도 증가해야 합니다. 이는 다음과 같은 절차를 포함합니다:
- 기존 임베딩 행렬에 새로운 행(벡터) 추가
- 새로운 벡터를 적절히 초기화
- 추가된 어휘가 포함된 데이터로 미세조정
# 예시: PyTorch에서 임베딩 확장
import torch.nn as nn
original_embedding = nn.Embedding(30000, 768) # 기존 어휘 크기 30,000
new_embedding = nn.Embedding(30500, 768) # 확장 후 30,500
# 기존 가중치 복사
new_embedding.weight.data[:30000] = original_embedding.weight.data
# 나머지 부분은 초기화 (예: 정규분포)
nn.init.normal_(new_embedding.weight.data[30000:])
토크나이저 업데이트
어휘 확장 시 토크나이저도 동일하게 업데이트되어야 합니다. 예를 들어 Hugging Face의 transformers
라이브러리에서는 [tokenizer.add_tokens](/doc/%EA%B8%B0%EC%88%A0/%EC%9E%90%EC%97%B0%EC%96%B4%EC%B2%98%EB%A6%AC/%EC%9E%90%EC%97%B0%EC%96%B4%EC%B2%98%EB%A6%AC%20%EB%8F%84%EA%B5%AC/tokenizer.add_tokens)()
메서드를 통해 새로운 토큰을 추가하고, 모델의 임베딩 크기를 동기화할 수 있습니다.
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("klue/bert-base")
model = AutoModel.from_pretrained("klue/bert-base")
new_tokens = ["메타버스", "NFT",AI작가"]
num_added = tokenizer.add_tokens(new_tokens)
model.resize_token_embeddings(len(tokenizer))
관련 기술 및 전략
- 어휘 공유(Vocabulary Sharing): 다국어 모델에서 언어 간 어휘를 공유하여 확장 효율성 증대
- 서브워드 확장: BPE나 WordPiece 기반 모델에서 서브워드 유닛을 확장하여 미등록 단어 처리 개선
- 의미 유사도 기반 추론: 어휘에 없는 단어를 유사한 의미의 기존 단어로 대체하거나, 임베딩 공간에서 근사
결론
어휘 확장은 자연어처리 모델의 지속적인 성능 유지와 도메인 적응을 위한 핵심 유지보수 기술입니다. 언어의 동적 특성을 반영하고, 새로운 표현을 효과적으로 처리하기 위해 체계적인 접근이 필요합니다. 기술적으로는 토크나이저와 임베딩 레이어의 조정이 필수적이며, 재훈련 비용과 성능 저하를 최소화하는 전략이 중요합니다. 향후에는 자동화된 어휘 감지 및 확장 시스템이 모델 운영 파이프라인의 표준 구성 요소로 자리 잡을 것으로 예상됩니다.
참고 자료
- Devlin, J., et al. (2019). "BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding." NAACL.
- Kudo, T. (2018). "SentencePiece: A simple and language independent subword tokenizer and detokenizer for Neural Text Processing." EMNLP.
- Hugging Face Transformers 문서: https://huggingface.co/docs/transformers
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.